#include <stdio.h>
#include <unistd.h>
#include <string.h> 
int main()
{
    // C接口
    printf("hello printf\n");
    fprintf(stdout, "hello fprintf\n");
    const char *fputsString = "hello fputs\n";
    fputs(fputsString, stdout);
    // 系统接口
    const char *wstring  = "hello write\n";
    write(1, wstring, strlen(wstring));

    // 代码结束之前，进行创建子进程
    // 1. 如果我们没有进行 >（重定向） 看到了4条消息
    //      stdout 默认使用的是行刷新，在进程fork() 之前，三条C函数已经将数据进行打印输出到显示器上(外设)，FILE内部，进程内部不存在对应的数据了
    // 2. 如果我们进行了 > , 写入文件不再是显示器，而是普通文件，采用的刷新策略是全缓冲，之前的3条C显示函数，虽然带了\n ，但是不足以stdout缓冲区写满，
//数据并没有被刷新！！！！
    // 执行fork的时候，stdout 属于父进程，创建子进程时，紧接着就是进程退出！！ 谁先退出，一定要进行缓冲区刷新(刷新的本质：就是修改) 会发生写实拷贝，所以数据最终会显示2份
    // 3. write为什么没有显示2分呢？因为上面的过程和write无关，write没有FILE，write用的是fd，就没有C提供的缓冲区
    fork();

}
